package pe.edu.sistemas.samupg.view.managedbeans.admin;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.event.ActionEvent;

import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.edu.sistemas.samupg.domain.model.Periodo;
import pe.edu.sistemas.samupg.repository.dao.PeriodoDAO;

@SuppressWarnings("serial")
@Scope("view")
@Controller
@ManagedBean
public class GestionPeriodosController implements Serializable {

	private List<Periodo> periodos;
	private Periodo periodoSeleccionado;
	private Periodo periodoNuevo;
	private String tipo;

	@Autowired
	private PeriodoDAO periodoBean;

	@PostConstruct
	public void init() {
		periodos = periodoBean.findAll();
	}

	public void initPeriodo(ActionEvent evt) {
		tipo = (String) evt.getComponent().getAttributes().get("tipo");
		switch (tipo) {
		case "0":
			setPeriodoNuevo(new Periodo());
			break;

		default:
			boolean seleccionado = true;
			RequestContext context = RequestContext.getCurrentInstance();
			if (periodoSeleccionado == null)
				seleccionado = false;
			else
				setPeriodoNuevo(periodoSeleccionado);
			context.addCallbackParam("isSeleccionado", seleccionado);
			break;
		}
	}

	public void editPeriodo(ActionEvent evt) {
		switch (tipo) {
		case "0":
			periodoNuevo.setActual(false);
			periodoBean.create(periodoNuevo);
			break;

		case "1":
			periodoBean.edit(periodoNuevo);
			break;

		case "2":
			periodoBean.remove(periodoNuevo);
			break;
		}

		periodoNuevo = new Periodo();
		refreshPeriodos(null);
	}

	public void refreshPeriodos(ActionEvent evt) {
		periodos = periodoBean.findAll();
	}

	public List<Periodo> getPeriodos() {
		return periodos;
	}

	public void setPeriodos(List<Periodo> periodos) {
		this.periodos = periodos;
	}

	public Periodo getPeriodoSeleccionado() {
		return periodoSeleccionado;
	}

	public void setPeriodoSeleccionado(Periodo periodoSeleccionado) {
		this.periodoSeleccionado = periodoSeleccionado;
	}

	public Periodo getPeriodoNuevo() {
		return periodoNuevo;
	}

	public void setPeriodoNuevo(Periodo periodoNuevo) {
		this.periodoNuevo = periodoNuevo;
	}
}
